package c_interface;

/**
 * 学生类，实现了Comparable接口用于比较学生分数。
 * @author Cheng-02
 * @version V1.0
 * @Package c_interface
 * @date 2024/4/1 下午1:27
 */
public class Student implements Comparable {
    private String name; // 学生姓名
    private int score; // 学生分数

    /**
     * 无参构造函数，创建一个空的学生对象。
     */
    public Student() {
    }

    /**
     * 带参数的构造函数，用于初始化学生对象。
     * @param name 学生的姓名
     * @param score 学生的分数
     */
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    /**
     * 获取学生的姓名。
     * @return 返回学生的姓名。
     */
    public String getName() {
        return name;
    }

    /**
     * 设置学生的姓名。
     * @param name 要设置的学生姓名。
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取学生的分数。
     * @return 返回学生的分数。
     */
    public int getScore() {
        return score;
    }

    /**
     * 设置学生的分数。
     * @param score 要设置的学生分数。
     */
    public void setScore(int score) {
        this.score = score;
    }

    /**
     * 重写toString方法，用于返回学生对象的字符串表示。
     * @return 返回格式化的学生信息字符串。
     */
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }

    /**
     * 实现Comparable接口的compareTo方法，用于比较两个学生的分数。
     * @param o 待比较的Object对象，预期为Student类型。
     * @return 返回两个学生分数的差值，用于排序。
     */

    /*
    * this代表student[i]，o代表代表student[i+1]
    * 如果student[i].getScore-student[i+1].getScore>0，返回1
    * 代表数组前一个对象比后一个对象大
    *
    * 如果student[i].getScore-student[i+1].getScore<0，返回-1
    * 代表数组前一个对象比后一个对象小
    *
    * 如果student[i].getScore-student[i+1].getScore=0，返回0
    * 代表数组前一个对象与后一个对象相等
    * */
    @Override
    public int compareTo(Object o) {
        Student s=(Student)o;
        return this.score-s.getScore();
    }

}
